<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    /* 
    Number.isFinite(15) 判断一个数是是否为有限的
    */
    console.log(Number.isFinite(15));// true
    console.log(Number.isFinite(10 / 0));// false 10/0 趋于无穷大，那么不是有限的

    /*
        NaN 不是一个数字
    */

    /* 如何判断一个变量是否是 NaN */
    let a = 1.23;
    let b = 'abc';
    let rs = a / b;
    console.log(rs == NaN);

    // NaN 翻译过来：不是一个数，那么== 左侧代表不是一个数，右侧代表不是一个数，并不意味着这两个
    // 都不是数的值是一样的。
    console.log(NaN == NaN);

    /* es5 里面是 */
    console.log(isNaN(rs));

    /* es6 里面 */
    console.log(Number.isNaN(rs));

    /* 判断一个数是否是整数 */
    console.log(Number.isInteger(a));

    /* es6里面 整数和小数的转换 api变了 */
    console.log(parseInt(12.23));

    console.log(Number.parseInt(23.3445));
    console.log(Number.parseFloat('23.3445abc'));

    /* es6 里面还有一个精度值 是用于表示 JavaScript里面能够处理到的最大的精度范围 */
    console.log(Number.EPSILON);
    /// 2.220446049250313 * 10 ^-16
    // 0.00000000000000000000022204

    /* 检测小数是否相等 在程序里面是不相等，但是数学上确实是相等。不等的原因主要是在计算机小数是有精度的 */
    console.log(0.1 + 0.2 === 0.3); // false
    console.log(0.1 + 0.2);

    /* 笔试题：在JavaScript里面检测两个小数是否相等，我们不能直接比较的。应该是拿这两个操作数
    做相减，然后得出的结果和JavaScript里面的最大的精度做比较，如果比这个精度范围还小，则我们应该这
    两个数字相等。
    
    可以编写一个函数，来验证他们的精度范围是否在最小范围内，如果在则我们相等 */
    function isEqual(a, b) {
        return Math.abs(a - b) < Number.EPSILON;
    }

    console.log(isEqual(0.1 + 0.2, 0.3)); // true



</script>

</html>